home *** CD-ROM | disk | FTP | other *** search
-
-
- Paul Schubert
- Rottweiler Str. 8
- D60327 Frankfurt / M
- Tel.: 069 / 231145
- Fido 2:244/1181.18
-
-
- Beschreibung der UNIT FCONDRV
- ─────────────────────────────
-
- FCONDRV entstand im Zuge des PRUSSG Projekts.
- Es ging mir hauptsächlich darum, daß ich nicht auf den Komfort der
- Ausgabeformatierung mittels WRITE() verzichten, aber dafür nicht von CRT
- abhängig sein wollte.
-
- FCONDRV enthält hauptsächlich einen CON: Treiber für WRITE(), der direkt
- auf den Textmodus Videospeicher zugreift. Es hat sich ergeben, daß einige
- Prozeduren aus CRT in einem so engen Zusammenhang mit diesem Treiber
- stehen, daß sie unbedingt mit in der Unit integriert sein müssen.
- Ebenso wollte ich nicht auf WINDOW verzichten, welches somit auch
- in FCONDRV enthalten ist. Es hat sich gezeigt, daß es einige sehr leicht
- zu programmierende aber extrem nützliche Zusätze zu den CRT Funktionen
- gibt, die ich sogleich mit einfließen ließ.
-
- Derzeit kann FCONDRV nur direkt ins Videoram schreiben, die UNIT
- bietet aber die Möglichkeit, sowohl eine BIOS Ausgabe als auch einige
- andere nützliche Dinge zu implementieren - insbesondere denke ich da an
- Terminal Emulationen bzw. einen extrem schnellen Treiber, der zwar
- <cr> und <lf> nicht beachtet, dafür aber etwa 4 mal so schnell ausgibt.
-
- Ich habe großen Wert darauf gelegt, daß FCONDRV mit allen Text Videomodi
- zurecht kommt, die korrekte Werte ins BIOS RAM auf $40:0... eintragen
- und auch problemlos gemischt mit BIOS Ausgabefunktionen und im Betrieb
- mit bis zu 8 Bildschirmseiten arbeiten kann. Sollte dies an der einen
- oder anderen Stelle nicht gelungen sein, bitte ich darum, mich sofort
- zu benachrichtigen.
- Es ist recht unwahrscheinlich, daß es vom BIOS einstellbare Text
- Videomodi gibt, die die Einträge im BIOS RAM nicht aktualisieren, weil
- das Video BIOS sonst selbst nicht richtig auf den Bildschirm schreiben
- könnte. Wer unbedingt 'tweaked' Textmodi benutzen will, die durch
- direkte Registerprogrammierung der VGA eingestellt werden, der muß
- leider sowohl auf die Textausgabe mittels BIOS als auch mittels FCONDRV
- verzichten.
- Eventuell kann FCONDRV auch in tweaked Textmodi ( z.B. für Softscrolling )
- verwandt werden, wenn nach dem Umprogrammieren des CRT Controllers die
- aktuellen Werte im BIOS RAM eingetragen werden und danach REINITCRT
- aufgerufen wird.
-
-
- FCONDRV ersetzt folgende CRT Prozeduren, Funktionen und Variablen :
-
- TEXTATTR : BYTE = 7;
- Enthält das Textattribut zum Schreiben via WRITE()
-
- WINDMIN : WORD = 0;
- WINDMAX : WORD = 24 SHL 8 + 79;
- Enthält die aktuellen Fensterkoordinaten
-
- DIRECTVIDEO : BOOLEAN = TRUE;
- Ist DIRECTVIDEO = TRUE, wird ohne BIOS in den Bildschirmspeicher
- geschrieben, bei DIRECTVIDEO := FALSE; wird über die Video BIOS
- Funktionen geschrieben.
- Letzteres hat vor allem den Vorteil, daß die Textausgabe auch in den
- Grafik Videomodi ( außer 'tweaked' Modi ) funktioniert. Es birgt aber
- einen Nachteil : Die Lösch- und Scrollfunktionen funktionieren nur
- auf Videopage 0 ! Dieser Nachteil ist in der Funktion des Video BIOS
- begründet.
-
- PROCEDURE CASSIGN(VAR F:TEXT);
- Entspricht etwa ASSIGNCRT aus CRT, muß aber wie folgt benutzt werden :
- CASSIGN(OUTPUT);
- REWRITE(OUTPUT);
- Daß die Filevariable angegeben werden muß, hat m.e. den Vorteil, daß
- sich auch andere Files als OUTPUT zuweisen lassen.
-
- Folgende Prozeduren und Funktionen arbeiten mit WINDOW zusammen :
-
- PROCEDURE WINDOW(X1,Y1,X2,Y2:BYTE);
- PROCEDURE CLRSCR;
- PROCEDURE GOTOXY(X,Y:BYTE);
- FUNCTION WHEREX:BYTE;
- FUNCTION WHEREY:BYTE;
- PROCEDURE CLREOL;
- Die Funktionen entsprechen denen von CRT, ich muß aber anmerken, daß
- GOTOXY nicht überprüft, ob die angegebene Cursorposition außerhalb des
- WINDOWs liegt.
- WINDOW dürfte nicht korrekt mit mehreren Bildschirmseiten zusammen
- arbeiten - es gibt nur 1 WINDOW, auf das sich die Ausgaben in der
- aktuellen Bildschirmseite beziehen. Sollten separate WINDOWs für jede
- Bildschirmseite wünschenswert sein, bitte ich um Benachrichtigung.
-
- Einige Prozeduren habe ich selbst definiert :
- PROCEDURE CLREOS;
- Clear to End of Screen - ähnlich CLREOL, löscht ab der Cursorposition
- bis zum Ende des durch WINDOW eingestellten Fensters.
-
- PROCEDURE REINITCRT;
- Da FCONDRV mit verschiedenen Videomodi arbeiten kann, ist es nötig,
- nach Ändern des Videomodus REINITCRT aufzurufen, damit FCONDRV sich auf
- den neuen Videomodus einstellen kann.
-
- PROCEDURE PUSHWINDOW;
- PROCEDURE POPWINDOW;
- Diese Prozeduren können Fensterinhalte auf den Heap speichern bzw.
- vom Heap restaurieren - sie können mehrmals hintereinander benutz werden
- und arbeiten nach dem First In First Out Prinzip.
- Gespeichert wird jeweils der Bildschirminhalt des aktuellen durch
- WINDOW eingestellten Fensters.
- PUSHWINDOW und POPWINDOW arbeiten immer auf der Aktuellen Bildschirmseite,
- sodaß es möglich ist, damit Bildschirminhalte von einer Seite auf eine
- andere zu kopieren.
-
- Folgende Prozeduren und Funktionen arbeiten unabhängig vom WINDOW immer
- auf den gesamten Bildschirm bezogen :
-
- PROCEDURE CLRSCRABSOLUTE;
- Entspricht CLRSCR - löscht immer den ganzen Bildschirm
-
- PROCEDURE GOTOXYABSOLUTE(X,Y:BYTE);
- Entspricht GOTOXY, positioniert den Cursor immer relativ zur oberen
- linken Bildschirmecke.
-
- FUNCTION WHEREXABSOLUTE:BYTE;
- FUNCTION WHEREYABSOLUTE:BYTE;
- Entsprechen WHEREX und WHEREY, liefern immer die Cursorposition relativ
- zur linken oberen Bildschirmecke.
-